package com.qingke.bullfight;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;

/**
 * 斗牛类
 * 
 * @author Administrator
 *
 */
public class BullFight {
	public static Scanner sc = new Scanner(System.in);
	public Table t=new Table();
	public void run(){
		//是否开启读档功能，这个功能暂时有点问题，每次读档完，人物名字全乱了，其他都对
		t=isNeedRead(t);
		//不读档初始化
//		t=initialize();
		play(t);
	}
	/**
	 * 读档功能
	 * 
	 * @param t
	 * @return
	 */
	public static Table isNeedRead(Table t){
		if(isExist()){
			System.out.println("★★★欢迎回到斗牛★★★");
			System.out.println("是否读档？【1】是、【2】否");
			while(true){
				int isYes=sc.nextInt();
				if(isYes==1){
					t=read();
					break;
				}
				else if(isYes==2){
					t=initialize();
					break;
				}
			}
		}
		else{			
			t=initialize();	
		}
		return t;
	}
	/**
	 * 初始化
	 * 输入名字性别筹码对战玩家人数
	 * @return
	 */
	public static Table initialize(){
		System.out.println("★★★欢迎来到斗牛★★★");
		Table t = new Table();
		Gamer me;
		String name="";
		String gender="";
		int chip=0;
		while(true){
			System.out.println("请输入你的名字：");
			name=sc.next();
			if(name!="")
				break;
		}
		while(true){
			System.out.println("请输入你的性别：（【1】男、【2】女）");
			int i=sc.nextInt();
			if(i==1){
				gender="男";
				break;
			}
			else if(i==2){
				gender="女";
				break;
			}
		}
		while(true){
			System.out.println("请充值你的初始筹码：");
			chip=sc.nextInt();
			if(chip>0)
				break;
		}
		me = new Gamer(name,gender,chip);
		t.add(me);
		while(true){
			System.out.println("你想与几名玩家一起斗牛：（1~9）");
			int count=sc.nextInt();
			if(count>0&&count<10){
				for(int i=0;i<count;i++){
					t.add();
				}
				break;
			}
		}
		return t;
	}
	/**
	 * 控制菜单
	 * 接收输入的指令，执行相应的操作
	 * @param t
	 */
	public static void play(Table t){
		while(true){
			print();
			switch(sc.nextInt()){
			case 1:
				System.out.println("=========★★★斗牛开始★★★=========");
				t.start();
				break;
			case 2:
				charge(t.gamers[0]);
				break;
			case 3:
				t.add();
				break;
			case 4:
				t.remove();
				break;
			case 5:
				clear();
				t.listGamers();
				break;
			case 6:
				save(t);
				break;
			case 7:
				sc.close();
				return;
			}
			
		}
	}
	/**
	 * 显示菜单
	 */
	public static void print(){
		System.out.println("====★菜单★====");
		System.out.println("【1】开始新一局");
		System.out.println("【2】充值筹码");
		System.out.println("【3】增加玩家");
		System.out.println("【4】踢出玩家");
		System.out.println("【5】清屏");
		System.out.println("【6】保存");
		System.out.println("【7】退出");
	}
	/**
	 * 给主角充值筹码
	 * @param g
	 */
	public static void charge(Gamer g){
		while(true){
			System.out.println("充值筹码：");
			int chip=sc.nextInt();
			if(chip>0){
				g.chargeChip(chip);
				break;
			}
		}
	}
	/**
	 * 存档
	 * 
	 * @param table
	 */
	public static void save(Table table){
		File file=new File("game.txt");
		FileOutputStream fos=null;
		ObjectOutputStream oos=null;
		
		if(file.exists()){
			file.delete();
			System.out.println("存档已覆盖");
		}
		else{
			try{
				file.createNewFile();
				System.out.println("存档已创建");
			}catch(IOException e){
				e.printStackTrace();
			}
		}		
		try{
			fos=new FileOutputStream(file);
			oos=new ObjectOutputStream(fos);
			oos.writeObject(table);
			System.out.println("存档成功");
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(oos!=null){
				try{
					oos.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
			if(fos!=null){
				try{
					fos.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		}				
	}
	/**
	 *读档
	 *有点问题，读出来的挡，信息都对，唯独姓名全部被随机了
	 * @return
	 */
	public static Table read(){
		File file=new File("game.txt");
		FileInputStream fis=null;
		ObjectInputStream ois=null;		
		Table table =null;
		try{
			fis=new FileInputStream(file);
			ois=new ObjectInputStream(fis);
			table=(Table)ois.readObject();
			System.out.println("读取成功");
			table.listGamers();
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}finally{
			if(ois!=null){
				try{
					ois.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
			if(fis!=null){
				try{
					fis.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		}	
		return table;
	}
	public static boolean isExist(){
		File file=new File("game.txt");
		if(file.exists())
			return true;
		else
			return false;
	}
	public static void clear(){
		for(int i=0;i<50;i++){
			System.out.println();
		}
	}
		
}
